package javase2.day04.demo01;

import java.util.HashMap;
import java.util.Map;

/*
java.util.Map<key,value>
Map是一个双序集合：
    特点：
        1一个元素包含一个key一个value值
        2key和value数据类型可以相同也可以不同
        3key不能重复，value可以重复
        4key和value是一一对应的

java.util.HashMap<key,value>集合 implements Map<key,value>接口
HashMap集合的特点：
        1HashMap集合底层是哈希表：查询的速度特别快
            jdk1.8之前：数组+单向链表
            jdk1.8之后：数组+单向链表/红黑树（链表长度超过8）：提高查询的速度
        2hashMap集合是一个无序集合，储存元素和取出元素的顺序有可能不一致
java.util.LinkedHashMap<key,value>集合 extends  HashMap<key,value>集合
        1LinkedHashMap集合底层是哈希表+链表（保证了迭代的顺序）
        2LinkedHashMap集合是一个有序的集合，存储元素和取出元素的顺序是一致的
 */
public class Demo01Map {
    public static void main(String[] args) {
//         show1();
        System.out.println("---------------------------------------------------");
//         show2();
//        show3();
        show4();
    }

    //public V put(K key, V value) : 把指定的键与指定的值添加到Map集合中。
    //使用put方法时，若指定的键(key)在集合中没有，则没有这个键对应的值，返回null，并把指定的键值添加到 集合中；
    //若指定的键(key)在集合中存在，则返回值为集合中键对应的值（该值为替换前的值），并把指定键所对应的 值，替换成指定的新值。
    private static void show1() {
        //创建Map集合，多态左父右子
        Map<String, String> map = new HashMap<>();
        String yangguo = map.put("杨过", "小龙女");
        map.put("尹志平", "小龙女");
        String yizhiping = map.put("尹志平", "龙女");
        map.put("唐三藏", "白骨精");
        System.out.println(yangguo);//null
        System.out.println(yizhiping);//小龙女
        System.out.println(map);//重写了toString方法{杨过=小龙女, 尹志平=龙女, 唐三藏=白骨精}
    }

    //public V remove(Object key):把指定的键所对应的键值对元素在Map集合中删除，返回被删除元素的值。
    private static void show2() {
        Map<String, String> map = new HashMap<>();
        map.put("小哪吒", "150");
        map.put("大小姐", "175");
        map.put("妹纸", "168");
        System.out.println(map);//{大小姐=175, 小哪吒=150, 妹纸=168}   无序集合
        String removeStr1 = map.remove("大小姐");
        String removeStr2 = map.remove("女神");
        System.out.println(removeStr1);//175
        System.out.println(removeStr2);//null
        System.out.println(map);//{小哪吒=150, 妹纸=168}
    }

    //public V get(Object key) 根据指定的键，在Map集合中获取对应的值。
    private static void show3() {
        Map<String, String> map = new HashMap<>();
        map.put("小哪吒", "150");
        map.put("大小姐", "175");
        map.put("妹纸", "168");
        System.out.println(map);//{大小姐=175, 小哪吒=150, 妹纸=168}   无序集合
        String meizhi = map.get("妹纸");
        String nvsheng = map.get("女神");
        System.out.println(meizhi);//168
        System.out.println(nvsheng);//null
    }

    //containsKey是否包含指定的键
    private static void show4() {
        Map<String, String> map = new HashMap<>();
        map.put("小哪吒", "150");
        map.put("大小姐", "175");
        map.put("妹纸", "168");
        System.out.println(map);//{大小姐=175, 小哪吒=150, 妹纸=168}   无序集合
        boolean b1 = map.containsKey("大小姐");
        boolean b2 = map.containsKey("女神");
        System.out.println(b1);//true
        System.out.println(b2);//false
    }
}


